#include <stdlib.h>
#include <stdio.h>
#include "Liste.h"


void initialise(Liste * l)
{
    (*l).prem = NULL;   /* aucune cellule dans la liste */
    (*l).last = NULL; /* aucun élément inséré */
}

int estVide(const Liste * l)
{
	if((*l).prem == NULL) /* l.prem = NULL donc *l.prem.info n'existe pas alors la liste est vide */
	return 1;
	else return 0;
}

/*unsigned int nbElements(const Liste * l)
{
	unsigned int nb=0;
	Cellule * c;
	if (estVide(l) == 1)
	{
		return 0
	}
	else
	{	
		
	
}*/

void afficherListeGaucheDroite(const Liste * l){
    Cellule * c=(*l).prem;
    while(c != NULL)
	{
        afficheElement((*c).info);
        c=(*c).suivant;
	}
}
void afficherListeDroiteGauche(const Liste * l)
{
    Cellule *c=(*l).last;
    while(c != NULL)
    {
        afficheElement((*c).info);
        c=(*c).precedent;
    }
}

void ajoutEnTete(Elem e,Liste * l)
{
	Cellule * c;
	c=(Cellule*)malloc(sizeof(Cellule));
	(*c).info=e;
	(*c).suivant =(*l).prem;
	(*l).prem=c;
}


void ajoutEnQueue(Elem e,Liste * l)
{
	Cellule * c ;
	c=(Cellule*)malloc(sizeof(Cellule));
	(*c).info=e;
	(*l).last=c;
	(*c).precedent=(*l).last;
}

void suppressionEnTete(Liste * l)
{
 	Cellule *c=(*l).prem;
	(*l).prem=(*c).suivant;
	free(c);
}


void videListe(Liste * l)
{	
	while(estVide(l) == 0)
	{
		suppressionEnTete(l);
		videListe(l);
	}
}


void testament(Liste * l){
    videListe(l);
}

void affectation(Liste * l1, const Liste * l2);
/* Precondition : l1 et l2 prealablement initialisees et manipulees uniquement
                  a travers les operations du module
   Postcondition : la liste l1 correspond a une copie de l2 
   (mais les 2 listes sont totalement independantes l'une de l'autre) */


int rechercheElement(Elem e, const Liste *l);
/* Precondition : l initialisee et manipulee uniquement a travers les 
   operations du module
   Resultat : Position de la premiere occurrence de e dans la liste (en
   partant de la gauche), -1 si e n'est pas dans la liste. Les cellules 
   sont numerotees de 0 a n-1, donc une valeur de retour egale a 0 
   signifie sue la premiere occurrence de e se trouve dans la premiere
   cellule de la liste. */


void insererElement(Elem e, Liste * l, unsigned int position);
/* Preconditions : l initialisee et manipulee uniquement a travers les 
   operations du module, 0 <= position <= nbElements(l)
   Postconditions : une copie independante de e est inseree de sorte a 
   ce qu'elle occupe la position indiquee dans la liste l (les positions 
   etant numerotees a partir de 0).*/ 






